package controller;

import eccezioni.CampoErratoException;
import entity.Annuncio;
import entity.UtenteRegistrato;
import java.util.List;
import javax.ejb.Local;
import utilities.AnnuncioConDistanza;

/**
 * Metodi per svolgere la ricerca di un annuncio
 * @author Ale
 */
@Local
public interface ControllerRicercaLocal {

    /**
     * Esegue una ricerca tra gli annunci coi parametri specificati, che sono tutti opzionali
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param url sito a cui si riferisce la ricerca
     * @param vicinoA indirizzo in base a cui sono ordinati i risultati
     * @return la lista di annunci corrispondenti
     * @throws CampoErratoException se ci sono dei parametri di ricerca non nel formato corretto
     */
    public java.util.List<AnnuncioConDistanza> cerca(UtenteRegistrato utenteLoggato, java.lang.String url, java.lang.String vicinoA) throws eccezioni.CampoErratoException;

    /**
     * Esegue una ricerca tra gli annunci aperti coi parametri specificati, che sono tutti opzionali
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param sito sito a cui si riferisce la ricerca
     * @param vicinoA indirizzo in base a cui sono ordinati i risultati
     * @return la lista di annunci aperti corrispondenti
     */
    public java.util.List<AnnuncioConDistanza> cercaAperti(UtenteRegistrato utenteLoggato, java.lang.String sito, java.lang.String vicinoA);

    /**
     * Esegue una ricerca tra gli annunci coi parametri specificati, che sono tutti opzionali
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param sito sito a cui si riferisce la ricerca
     * @param dataChiusura data massima di chiusura degli annunci cercati
     * @param dataOrdine data massima di ordine degli annunci cercati
     * @param vicinoA indirizzo in base a cui sono ordinati i risultati
     * @param chiusi true sse si vogliono includere anche gli annunci chiusi
     * @return la lista di annunci corrispondenti
     * @throws CampoErratoException se ci sono dei parametri di ricerca non nel formato corretto
     */
    public java.util.List<AnnuncioConDistanza> cerca(UtenteRegistrato utenteLoggato, java.lang.String sito, java.lang.String dataChiusura, java.lang.String dataOrdine, java.lang.String vicinoA, boolean chiusi) throws CampoErratoException;

    /**
     * Esegue una ricerca tra gli annunci coi parametri specificati, che sono tutti opzionali
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param sito sito a cui si riferisce la ricerca
     * @param dataChiusura data massima di chiusura degli annunci cercati
     * @param dataOrdine data massima di ordine degli annunci cercati
     * @param vicinoA indirizzo in base a cui sono ordinati i risultati
     * @param chiusi true sse si vogliono includere anche gli annunci chiusi
     * @param minFeed feedback minimo che deve avere il creatore di un annuncio per restituirlo
     * @return la lista di annunci corrispondenti
     * @throws CampoErratoException se ci sono dei parametri di ricerca non nel formato corretto
     */
    public java.util.List<AnnuncioConDistanza> cerca(UtenteRegistrato utenteLoggato, java.lang.String sito, java.lang.String dataChiusura, java.lang.String dataOrdine, java.lang.String vicinoA, boolean chiusi, int minFeed) throws CampoErratoException;

    /**
     * Esegue una ricerca tra gli annunci coi parametri specificati, che sono tutti opzionali
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param sito sito a cui si riferisce la ricerca
     * @param dataChiusura data massima di chiusura degli annunci cercati
     * @param dataOrdine data massima di ordine degli annunci cercati
     * @param vicinoA indirizzo in base a cui sono ordinati i risultati
     * @param chiusi true sse si vogliono includere anche gli annunci chiusi
     * @param nomeCr nome del creatore degli annunci cercati
     * @param cognomeCr cognome del creatore degli annunci cercati
     * @return la lista di annunci corrispondenti
     * @throws CampoErratoException se ci sono dei parametri di ricerca non nel formato corretto
     */
    public java.util.List<AnnuncioConDistanza> cerca(UtenteRegistrato utenteLoggato, java.lang.String sito, java.lang.String dataChiusura, java.lang.String dataOrdine, java.lang.String vicinoA, boolean chiusi, java.lang.String nomeCr, java.lang.String cognomeCr) throws CampoErratoException;

    /**
     * Resistuisce la lista di annunci aperti presenti per una certa regione
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @param regione la regione per cui si cercano gli annunci
     * @return la lista di annunci aperti presenti per la regione specificata
     */
    public List<Annuncio> trovaInRegione(UtenteRegistrato utenteLoggato, String regione);

    /**
     * Recupera la lista di annunci in scadenza, cioè ancora aperti, ordinati per scadenza
     * @param utenteLoggato l'utente a cui mostrare gli annunci, null se è un guest
     * @return la lista di annunci in scadenza
     */
    public java.util.List<entity.Annuncio> trovaInScadenza(entity.UtenteRegistrato utenteLoggato);
    
}
